
/*function algorithm(x) {
   return x*x;
    
    
}//这是运算函数

function result(x,y,fn) {
     console.log(fn(x));
     console.log(fn(y));
    return fn(y)+fn(x)
    
}//这是把运算函数当作参数然后参与运算的高阶函数
console.log(result(1,6,algorithm));//调用高阶函数，计算传入参数后的值
*/


//=========array.map()
//由于map()方法定义在JavaScript的Array中，我们调用Array的map()方法，
//传入我们自己的函数，就得到了一个新的Array作为结果
/* var arr=[1,2,3,4,5,6,7,8,9];
function algorithm(a){

return a*a
}


console.log(arr.map(algorithm));
*/




//试着找出map()的算法原理





//=====reduce()
// 再看reduce()的用法。Array的reduce()把一个函数作用在这个Array的[x1, x2, x3...]上，
//这个函数必须接收两个参数，reduce()把结果继续和序列的下一个元素做累积计算，其效果就是：
// [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

//例子：用redce累积求和
/*
var arr=[1,1,1,1,1,1,1];//7个1

function algorithm (x,y){//需要传入两个参数，一个装逐个累计后的结果，一个装下一个要累计的值

   return x+y

}

console.log(arr.reduce(algorithm));
 */


//例子：用redce累积求积
/*
var arr=[1,2,3,4];//1*2*3*4=24

function algorithm (x,y){//需要传入两个参数，一个装逐个累计后的结果，一个装下一个要累计的值

   return x*y

}

console.log(arr.reduce(algorithm));
 */



//=======filter()
/*
filter也是一个常用的操作，它用于把Array的某些元素过滤掉，然后返回剩下的元素。
和map()类似，Array的filter()也接收一个函数。和map()不同的是，filter()把传入
的函数依次作用于每个元素，然后根据返回值是true还是false决定保留还是丢弃该元素。
*/
/*
var  arr = [1,2,3,4,5,6,7,8,9,10];

function f1(x){

   return x%2!=0
}
console.log(arr.filter(f1));
*/
